! function() {
	var body = document.getElementsByTagName('body')[0];

	var node_tips = document.createElement('div');
	node_tips.className = 'system-tips';
	body.appendChild(node_tips);

	var node_load = document.createElement('div');
	node_load.className = 'system-load';
	body.appendChild(node_load);

	var node_mask = document.createElement('div');
	node_mask.className = 'system-mask';
	body.appendChild(node_mask);

	var node_snackbar = document.createElement('div');
	node_snackbar.className = 'system-snackbar';
	var node_sb_p = document.createElement('p');
	var node_sb_a = document.createElement('a');
	node_sb_a.href = 'javascript:;';
	var node_sb_i = document.createElement('i');
	node_sb_i.className = 'icon-shut_down';
	node_sb_a.appendChild(node_sb_i);
	node_snackbar.appendChild(node_sb_p);
	node_snackbar.appendChild(node_sb_a);
	body.appendChild(node_snackbar);

	var system = {

		success: function() {
			showTips(arguments, '#50AF51');
		},

		error: function() {
			showTips(arguments, '#D9534F');
		},

		loading: function(msg) {
			$(node_mask).show();
			$(node_load).html(msg);
			$(node_load).stop(true).slideDown(260);
		},

		loaded: function() {
			$(node_mask).hide();
			$(node_load).stop(true).slideUp(260);
		},

		tips: function() {
			var msg = arguments[0] || null;
			
			if (!msg) {
				$(node_snackbar).stop(true).slideUp(260);
				return false;
			}
			
			var time = typeof arguments[1] == 'number' ? arguments[1] : null;
			var callback = typeof arguments[1] == 'function' ? arguments[1] : (arguments[2] || null);

			$(node_snackbar).children('p').html(msg);
			$(node_snackbar).stop(true).slideDown(260);

			node_sb_a.onclick = function() {
				callback && callback();
				$(node_snackbar).stop(true).slideUp(260);
			}

			if(time) {
				setTimeout(function() {
					node_sb_a.click();
				}, time);
			}
		}

	};

	function showTips(arrs, color) {
		var msg = arrs[0];
		var time = typeof arrs[1] == 'number' ? arrs[1] : 1600;
		var callback = typeof arrs[1] == 'function' ? arrs[1] : (arrs[2] || function() {});

		node_tips.style.backgroundColor = color;
		node_tips.innerHTML = msg;

		$(node_tips).stop(true).slideDown(260);

		setTimeout(function() {
			$(node_tips).stop(true).slideUp(260);
			callback();
		}, time);
	}

	window.system = system;
}();